// 实现new操作符
/* 1. 创建对象
2. 若函数返回值是值类型，则返回创建的实例对象，否则返回值
3. 将创建的实例对象的原型，指向函数的原型   (用此判断是否使用new操作符)
4. 将函数执行中的this指向创建的实例对象
*/
// arguments.length 本次函数调用时传入函数的实参数量
// function.length  指明函数的形参个数

function myNew(func, ...args) {
  if(typeof func !== 'function') {
    throw Error('必须为一个函数')
  }
  const obj = Object.create(func.prototype)
  const ans = func.apply(obj, args)
  const flag = ans && (typeof ans ==='object' || typeof ans === 'function')
  return flag ? ans : obj
}